package com.hzw.saas.web.shell.listener;

import com.hzw.saas.common.config.annotation.SysLog;
import com.hzw.saas.web.shell.service.IWebShellService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.messaging.SessionDisconnectEvent;

import javax.annotation.Resource;

/**
 * <p>
 * 在STOMP会话结束时发布。DISCONNECT可能是从客户端发送的，也可能是在WebSocket会话关闭时自动生成的。
 * 在某些情况下，每个会话多次发布此事件。关于多个断开事件，组件应该是幂等的
 * </p>
 *
 * @author sonam
 * @since 2021/5/21 16:57
 */
@Slf4j
@Component
public class SessionDisconnectListener implements ApplicationListener<SessionDisconnectEvent> {

    @Resource(name = "webShellServiceImpl")
    private IWebShellService webShellService;

    @Override
    @SysLog(operation = "关闭WS连接", mode = 3)
    public void onApplicationEvent(SessionDisconnectEvent event) {
        // 关闭连接,重试10次
        webShellService.closeConnection(event.getSessionId());
        log.info("{}和Websocket断开连接", event.getUser().getName());
    }

}
